/*
 * Copyright (C) 2008 Alessandro Sivieri <alessandro.sivieri@chimera-bellerofonte.eu>.
 *
 *  This file is part of Daex.
 *
 *  Daex is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Foobar is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
 */
package eu.chimera_bellerofonte.tesi.datatypes;

import java.io.Serializable;


/**
 * Questa interfaccia dichiara i metodi necessari all'applicativo per
 * poter avere le informazioni necessarie tramite cui gestire le tracce
 * e la corrispondenza tra dati software e devices fisici.
 * 
 * @author Sivieri Alessandro
 * @author Vitucci Nicola
 * @version 21/apr/07
 */
public interface Dvd extends Serializable
{

	static final long serialVersionUID = 1L;
	
	/**
	 * Questo metodo ritorna il device in uso.
	 * 
	 * @return il device in uso
	 */
	public abstract String getDevice();

	/**
	 * Questo metodo ritorna il numero del titolo principale
	 * del DVD inserito.
	 * 
	 * @return il numero del titolo principale
	 * @throws DvdException eccezione lanciata in caso di problemi di lettura
	 */
	public abstract int getMainTitle() throws DvdException;

	/**
	 * Metodo per variare il main title su cui eseguire il
	 * ripping; impone il ricalcolo delle variabili del dvd
	 * e puo' generare errori in caso di parametri errati.
	 * 
	 * @param title il titolo da considerare per il ripping
	 * @throws DvdException eccezione lanciata in caso di problemi con il device
	 */
	public void setMainTitle(int title) throws DvdException;
	
	/**
	 * Questo metodo ritorna il numero di capitoli del titolo principale.
	 * 
	 * @return il numero di capitoli del titolo principale
	 * @throws DvdException eccezione lanciata in caso di problemi di lettura
	 */
	public abstract int getMainTitleChapters() throws DvdException;
	
	/**
	 * Questo metodo ritorna il numero di titoli presenti nel DVD Video.
	 * 
	 * @return il numero di titoli del DVD
	 * @throws DvdException eccezione lanciata in caso di problemi di lettura
	 */
	public abstract int getTitles() throws DvdException;

	/**
	 * Questo metodo ritorna un valore di hash unico che identifica il
	 * supporto ottico in modo univoco.
	 * 
	 * @return il valore dell'hash
	 * @throws DvdException eccezione lanciata in caso di problemi di lettura
	 */
	public abstract String getHash() throws DvdException;

}